<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="generator" content="pandoc">
  <meta name="author" content="滨州学院">
  <title>实用软件工程</title>
  <meta name="apple-mobile-web-app-capable" content="yes">
  <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui">
  <link rel="stylesheet" href="reveal.js/css/reset.css">
  <link rel="stylesheet" href="reveal.js/css/reveal.css">
  <style>
      code{white-space: pre-wrap;}
      span.smallcaps{font-variant: small-caps;}
      span.underline{text-decoration: underline;}
      div.column{display: inline-block; vertical-align: top; width: 50%;}
  </style>
  <link rel="stylesheet" href="reveal.js/css/theme/white.css" id="theme">
  <!-- Printing and PDF exports -->
  <script>
    var link = document.createElement( 'link' );
    link.rel = 'stylesheet';
    link.type = 'text/css';
    link.href = window.location.search.match( /print-pdf/gi ) ? 'reveal.js/css/print/pdf.css' : 'reveal.js/css/print/paper.css';
    document.getElementsByTagName( 'head' )[0].appendChild( link );
  </script>
  <!--[if lt IE 9]>
  <script src="reveal.js/lib/js/html5shiv.js"></script>
  <![endif]-->
</head>
<body>
  <div class="reveal">
    <div class="slides">

<section id="title-slide">
  <h1 class="title">实用软件工程</h1>
  <p class="subtitle">CH06 软件测试</p>
  <p class="author">滨州学院</p>
</section>

<section id="学习目标" class="slide level2">
<h2>学习目标</h2>
<ul>
<li>【目的要求】
<ul>
<li>掌握：掌握软件测试的任务、原则和方法；</li>
<li>熟悉：软件测试的步骤。</li>
<li>了解：软件测试文档的内容。</li>
</ul></li>
<li>【重点与难点】黑盒测试和白盒测试、软件测试步骤</li>
</ul>
</section>
<section><section id="软件测试的目的和任务" class="title-slide slide level1"><h1>6.1 软件测试的目的和任务</h1></section><section id="软件测试的概念" class="slide level2">
<h2>软件测试的概念</h2>
<dl>
<dt>软件测试</dt>
<dd>是选择适当的测试用例执行被测试的程序的过程，测试的目的在于发现程序中的错误。
</dd>
<dd>软件测试是为了发现错误而执行程序的过程。
</dd>
<dd>测试是为了证明程序有错，而不是证明程序无错。
</dd>
<dd>一个成功的测试是发现了至今未被发现的错误的测试。
</dd>
</dl>
</section><section id="软件测试的具体任务" class="slide level2">
<h2>软件测试的具体任务</h2>
<ul>
<li>1）规划测试任务</li>
<li>2）设计测试用例</li>
<li>3）建立一个合适的测试执行环境</li>
<li>4）评估、获取、安装和配置自动测试工具</li>
<li>5）执行测试</li>
<li>6）撰写适当的测试文档</li>
</ul>
</section></section>
<section><section id="软件测试的原则" class="title-slide slide level1"><h1>6.2 软件测试的原则</h1></section><section id="软件测试的原则-1" class="slide level2">
<h2>软件测试的原则</h2>
<ul>
<li>程序开发者不对自己的程序进行测试</li>
<li>不断地进行软件测试</li>
<li>测试用例均应追溯到特定要求
<ul>
<li>有效性，可仿效性，经济性，修改性</li>
</ul></li>
<li>测试中的群集现象</li>
<li>严格执行测试计划</li>
<li>从“小规模”开始，逐步转向“大规模”</li>
<li>穷举测试不可取</li>
</ul>
</section></section>
<section><section id="软件测试的内容" class="title-slide slide level1"><h1>6.3 软件测试的内容</h1></section><section id="验证" class="slide level2">
<h2>验证</h2>
<ul>
<li>验证是保证软件正确地实现了一些特定功能的一系列活动。
<ul>
<li>确定软件生存周期中一个给定阶段的产品是否达到前一阶段确立的需求的过程</li>
<li>程序正确性的形式证明，即采用形式理论证明程序符合设计规定的过程</li>
<li>评定、审查、测试、检查、审计等各类活动</li>
</ul></li>
</ul>
</section><section id="确认" class="slide level2">
<h2>确认</h2>
<ul>
<li>确认是一系列的活动和过程，目的是证实在一个规定的外部环境中软件的逻辑正确性。
<ul>
<li>静态确认：不实际执行程序，人工或通过程序分析来证明软件的正确性。</li>
<li>动态确认：通过执行程序，测试程序的动态行为，以证实软件不存在问题。</li>
</ul></li>
</ul>
</section><section id="软件测试不等于程序测试" class="slide level2">
<h2>软件测试不等于程序测试</h2>
<ul>
<li>软件测试应贯穿于软件定义与开发的整个周期。
<ul>
<li>需求分析、概要设计、详细设计以及程序编码等各阶段所得到的文档，都应成为软件测试的对象。</li>
</ul></li>
</ul>
</section></section>
<section><section id="软件测试方法" class="title-slide slide level1"><h1>6.4 软件测试方法</h1></section><section id="静态测试与动态测试" class="slide level2">
<h2>1.静态测试与动态测试</h2>
<ul>
<li>静态测试</li>
<li>动态测试</li>
</ul>
</section><section id="黑盒测试与白盒测试" class="slide level2">
<h2>2. 黑盒测试与白盒测试</h2>
<ul>
<li>黑盒测试：又称为功能测试或数据驱动测试</li>
<li>白盒测试：又称为结构测试、逻辑驱动测试或基于程序的测试</li>
</ul>
</section><section id="黑盒测试" class="slide level2">
<h2>黑盒测试</h2>
<dl>
<dt>黑盒测试</dt>
<dd>是指把测试对象看做一个黑盒，测试时完全不考虑程序的内部逻辑结构与内部特性，只需根据需求规格说明书，测试程序的功能或程序的外部特性。
</dd>
</dl>
</section><section id="黑盒测试方法" class="slide level2">
<h2>黑盒测试方法</h2>
<ul>
<li>等价分类法</li>
<li>边界值分析法</li>
<li>错误推测法</li>
<li>因果图法</li>
<li>判定表驱动法</li>
</ul>
</section><section id="白盒测试" class="slide level2">
<h2>白盒测试</h2>
<dl>
<dt>白盒测试</dt>
<dd>是指根据软件产品的内部工作过程在计算机上进行测试，以证实每种内部操作是否都符合设计规格要求。
</dd>
<dd>白盒测试的宗旨是使测试用例尽可能覆盖程序内部逻辑。
</dd>
</dl>
</section><section id="白盒测试方法" class="slide level2">
<h2>白盒测试方法</h2>
<ul>
<li>（1）逻辑覆盖</li>
<li>（2）基本路径法</li>
<li>（3）跟踪调试</li>
</ul>
</section><section id="逻辑覆盖" class="slide level2">
<h2>（1）逻辑覆盖</h2>
<ul>
<li>语句覆盖</li>
<li>判定覆盖</li>
<li>条件覆盖</li>
<li>判定-条件覆盖</li>
<li>条件组合覆盖</li>
<li>路径覆盖</li>
</ul>
</section><section id="基本路径法" class="slide level2">
<h2>（2）基本路径法</h2>
<ul>
<li>程序的控制流图</li>
<li>程序环路复杂性</li>
<li>导出测试用例</li>
<li>准备测试用例</li>
<li>图形矩阵</li>
</ul>
</section><section id="跟踪调试" class="slide level2">
<h2>（3）跟踪调试</h2>
<ul>
<li>断点设置</li>
<li>查看变量</li>
<li>执行语句检查</li>
</ul>
</section><section id="黑盒测试和白盒测试的区别" class="slide level2">
<h2>黑盒测试和白盒测试的区别</h2>
<table>
<thead>
<tr class="header">
<th></th>
<th style="text-align: center;">黑盒测试</th>
<th style="text-align: center;">白盒测试</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>规划</td>
<td style="text-align: center;">功能测试</td>
<td style="text-align: center;">结构测试</td>
</tr>
<tr class="even">
<td>优点</td>
<td style="text-align: center;">确保从用户的角度出发进行测试</td>
<td style="text-align: center;">对程序内部的特定部位进行覆盖测试</td>
</tr>
<tr class="odd">
<td>缺点</td>
<td style="text-align: center;">无法测试程序内部特定部位；当规格说明有误时不能发现问题</td>
<td style="text-align: center;">无法检查程序的外部特性；无法对未实现规格说明的程序进行测试</td>
</tr>
<tr class="even">
<td>应用范围</td>
<td style="text-align: center;">等价类划分法；边界分析法；决策表示法</td>
<td style="text-align: center;">语句覆盖；判定覆盖；条件覆盖；判定-条件覆盖；路径覆盖；循环覆盖；模块接口测试</td>
</tr>
</tbody>
</table>
</section></section>
<section><section id="软件测试的步骤" class="title-slide slide level1"><h1>6.5 软件测试的步骤</h1></section><section id="软件测试步骤" class="slide level2">
<h2>软件测试步骤</h2>
<ul>
<li>单元测试</li>
<li>集成测试</li>
<li>确认测试</li>
<li>系统测试</li>
</ul>
</section><section id="单元测试" class="slide level2">
<h2>1. 单元测试</h2>
<dl>
<dt>单元测试</dt>
<dd>也称为模块测试，是指开发人员编写的一小段代码，用于检验被测代码的功能是否正确。
</dd>
</dl>
</section><section class="slide level2">

<ul>
<li>单元测试的内容
<ul>
<li>模块接口</li>
<li>局部数据结构</li>
<li>路径测试</li>
<li>错误处理</li>
<li>边界条件</li>
</ul></li>
<li>辅助模块
<ul>
<li>驱动模块</li>
<li>桩模块</li>
</ul></li>
</ul>
</section><section id="集成测试" class="slide level2">
<h2>2. 集成测试</h2>
<dl>
<dt>集成测试</dt>
<dd>将所有模块按照设计要求组装成为系统，这时在功能模块之间进行的测试称为集成测试，又称为组装测试或联合测试。
</dd>
<dd>重点测试模块接口部分，需要设计驱动模块或桩模块
</dd>
<dd>测试方法以黑盒测试为主
</dd>
</dl>
</section><section class="slide level2">

<ul>
<li>集成测试方法分类
<ul>
<li>非增殖式测试</li>
<li>增殖式测试
<ul>
<li>自顶向下的结合方式
<ul>
<li>深度优先结合</li>
<li>广度优先结合</li>
</ul></li>
<li>自底向上的结合方式</li>
<li>混合结合方式</li>
</ul></li>
</ul></li>
</ul>
</section><section id="确认测试" class="slide level2">
<h2>3. 确认测试</h2>
<dl>
<dt>确认测试</dt>
<dd>又称为有效性测试或合格测试，其任务是验证系统的功能、性能等特性是否符合需求规格说明。
</dd>
<dd>确认测试阶段要进行功能测试、软件配置审查、Alpha 测试和 Beta 测试
</dd>
</dl>
</section></section>
<section id="软件测试文档" class="title-slide slide level1"><h1>6.6 软件测试文档</h1></section>
<section><section id="调试" class="title-slide slide level1"><h1>6.7 调试</h1></section><section id="调试-1" class="slide level2">
<h2>调试</h2>
<dl>
<dt>调试</dt>
<dd>确定程序中可疑错误的性质、位置和严重级别；
</dd>
<dd>对设计和编码进行跟踪、修改，排除错误。
</dd>
</dl>
</section><section id="调试的步骤" class="slide level2">
<h2>调试的步骤</h2>
<ul>
<li>判断，定位</li>
<li>跟踪，溯源</li>
<li>修改，排错</li>
<li>测试</li>
<li>确认，反复</li>
</ul>
</section><section id="调试的困难" class="slide level2">
<h2>调试的困难</h2>
</section><section id="调试的方法" class="slide level2">
<h2>调试的方法</h2>
</section></section>
    </div>
  </div>

  <script src="reveal.js/js/reveal.js"></script>

  <script>

      // Full list of configuration options available at:
      // https://github.com/hakimel/reveal.js#configuration
      Reveal.initialize({
        // Push each slide change to the browser history
        history: true,

        // Optional reveal.js plugins
        dependencies: [
          { src: 'reveal.js/lib/js/classList.js', condition: function() { return !document.body.classList; } },
          { src: 'reveal.js/plugin/zoom-js/zoom.js', async: true },
          { src: 'reveal.js/plugin/notes/notes.js', async: true }
        ]
      });
    </script>
    </body>
</html>
